﻿using System;
using System.Linq;
using Bing.Maps;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Mutzl.Samples.MapApp.Model;
using Windows.UI.Xaml;

namespace Mutzl.Samples.MapApp.ViewModel
{
    public class DetailViewModel : ViewModelBase
    {
        private DispatcherTimer timer;

        [PreferredConstructor]
        public DetailViewModel()
        {

            if (IsInDesignMode)
            {
                // Designtime Data
                Finanzamt = Finanzamt.GetData().FirstOrDefault();
            }


            // Timer, um regelmäßig Öffnungszeit zu aktualisieren
            timer = new DispatcherTimer
                        {
                            Interval = TimeSpan.FromSeconds(10)
                        };
            timer.Tick += (sender, o) => RaisePropertyChanged(() => IsClosed);
            timer.Start();
        }

        public DetailViewModel(string kurzZeichen) : this()
        {
            Finanzamt = Finanzamt.GetData().SingleOrDefault(f => f.KurzZeichen == kurzZeichen);
        }

        private Finanzamt _finanzamt;
        public Finanzamt Finanzamt
        {
            get { return _finanzamt; }
            set
            {
                if (_finanzamt == value) return;
                _finanzamt = value;
                RaisePropertyChanged(() => Finanzamt);
                RaisePropertyChanged(() => Center);
            }
        }

        // damit es nicht so fad ist, exemplarisch ein bissl BusinessLogik
        // der Phantasie sind aber keine Grenzen gesetzt

        public bool IsClosed
        {
            get 
            { 
                // im Designmode will ich immer den "dz. geschlossen" Hinweis im UI sehen, egal zu welcher Uhrzeit
                if (IsInDesignMode) return true;

                // alle Finanzämter in ganz Ö einheitlich
                // Mo/Di/Mi/Do von 07:30 bis 15:30 Uhr, Fr von 07:30 bis 12:00 Uhr

                var now = DateTime.Now;
                if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday) return true;

                if (now.DayOfWeek == DayOfWeek.Monday
                    || now.DayOfWeek == DayOfWeek.Tuesday
                    || now.DayOfWeek == DayOfWeek.Wednesday
                    || now.DayOfWeek == DayOfWeek.Thursday)
                {
                    return (now.TimeOfDay < TimeSpan.FromHours(7.5)
                            || now.TimeOfDay > TimeSpan.FromHours(15.5));
                }

                if (now.DayOfWeek == DayOfWeek.Friday)
                {
                    return (now.TimeOfDay < TimeSpan.FromHours(7.5)
                            || now.TimeOfDay > TimeSpan.FromHours(12));                    
                }
                return true;
            }
        }

        public string MapsKey { get { return App.MapsKey; } }

        public Location Center
        {
            get { return new Location(Finanzamt.Latitude, Finanzamt.Longitude); }
        }

    }
}
